<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // async 修饰的函数返回的是一个promise对象
        // 1.在函数定义时候，作为函数关键字对函数进行修饰，语法：async 函数
        // 2.async 修饰的函数，在被调用的时候，将固定返回一个promise对象
        // 3.async修饰的函数返回的结果，将作为当前函数promise对象的PromiseResult的接受值使用(参数值)
        // 4.async修饰的函数内部的关键字await会将后续定义代码通过执行promise规则将fulfilled状态的结果值，作为通过代码返回值进行使用
        // 5.async修饰的函数的内部的关键字await会将所有的promise对象按照定义顺序自动构建then操作


        // async function show(){
        //    return 100;

        // }
        // var result=show();
        // console.log(result);
        // result.then(function(data){
        //     console.log(data);
        // });

        function createPromise(msg) {
            return new Promise(function (resolve, reject) {
                setTimeout(function () {
                    resolve(msg);
                }, 1000)
            });
        }
        // let p=createPromise("哈哈");
        // p.then(function(data){
        //     console.log(data);
        //     return createPromise("嘻嘻");
        // }).then(function(data){
        //     console.log(data);
        //     return createPromise("呵呵");
        // }).then(function(data){
        //     console.log(data)
        // });

        // async await在编程中被叫做语法糖
        // 语法糖：用简单关键字或者方法定义，将程序中固定结构或者固定的逻辑封装起来，让程序员通过简单定义方式快速实现代码或者提供简单应用规则
        // 下面的代码最终将转换成上面的代码
        async function test() {

            //遇到await，等到操作完成，再接着执行函数体内后面的语句。
          try{
            let data1 = await createPromise("aaa");//直接将fulfilled状态的promise对象的resolve()参数作为返回值
            console.log(data1);
            let data2 = await createPromise("bbb");
            console.log(data2);
            let data3 = await createPromise("ccc");
            console.log(data3);
          }catch(e){
            console.log("----------------");
            console.log(e);
          }
        }
        test();
    </script>
</head>

<body>

</body>

</html>